#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "stringop.h"
#include "error.h"
#include "fileop.h"

// Parametros: argc - Numero de argumentos CORRETO
//             Msg  - Vetor de mensagens
//             i    - Numero de argumentos do dado
void ArgError(int argc, String Msg[], int i) {
    if(argc != i) {
        printf("\n  %s\n\n", Msg[16]);
        exit(EXIT_FAILURE);
        system("pause");
    }
}

// Parametros: Nome - Vetor com nome em pos 0, RA em pos 1 e caractere em pos 2
//             Msg  - Vetor de mensagens
void ParameterError(String Nome[], String Msg[]) {
    char nome[VET_MAX],
         ra[VET_MAX],
         letra[VET_MAX];

    strcpy(nome,Nome[0]);
    strcpy(ra,Nome[1]);
    strcpy(letra, Nome[2]);

    if(erroBlank(nome) == 0) { // Erro: Campo nome esta em branco!
        printf("\n  %s\n", Msg[13]);
        exit(EXIT_FAILURE);
        system("pause");
    }
    if(Characters(nome) == 0) { // Erro: Nome contem caracteres invalidos!
        printf("\n  %s\n", Msg[14]);
        exit(EXIT_FAILURE);
        system("pause");
    }
    if(strlen(letra)>1) { // Erro: Arquivo contem mais de uma letra para pesquisa!
        printf("\n  %s\n", Msg[19]);
        exit(EXIT_FAILURE);
        system("pause");
    }
    if(erroBlank(letra) == 0) { // Erro: Campo letra esta em branco!
        printf("\n  %s\n", Msg[17]);
        exit(EXIT_FAILURE);
        system("pause");
    } 
    if(Characters(letra) == 0) { // Erro: Caractere selecionado eh invalido!
        printf("\n  %s\n", Msg[18]);
        exit(EXIT_FAILURE);
        system("pause");
    }
    if(erroBlank(ra) == 0) { // Erro: Campo RA esta em branco!
        printf("\n  %s\n", Msg[15]);
        exit(EXIT_FAILURE);
        system("pause");
    }
    if(Digits(ra) == 0) { // Erro: RA deve conter apenas numeros!
        printf("\n  %s\n", Msg[16]);
        exit(EXIT_FAILURE);
        system("pause");
    }
}

// Parametros: field -
//             tipo -
//             Msg  - Vetor de mensagens
Boolean FieldError(String field, int tipo, String Msg[]) {
    switch(tipo) {
        case 0:  if(Characters(field) == 0) return true;
                 else return false;
        case 1:  if(Alphanum(field) == 0) return true;
                 else return false;
        case 2:  if(Digits(field) == 0) return true;
                 else return false;
        case 5:  return false;
        default: break;
    }
    return false;
}

// Parametro: test - String a ser testada
int erroBlank(String test) {
    int i = 0;

    for(i = 0; test[i] != '\0'; i++)
        if(test[i] != branco) return 1;
    return 0;
}

// Parametro: text - String a ser testada
int Characters(String text) {
    int i=0;

    for(i = 0; text[i] != '\0'; i++)
        if(!isalpha(text[i]) && !isspace(text[i])) return 0;
    return 1;
}

// Parametro: text - String a ser testada
int Digits(String text) {
    int i=0;

    for(i = 0; text[i] != '\0'; i++)
        if(!isdigit(text[i]) && !isspace(text[i])) return 0;
    return 1;
}

// Parametro: text - String a ser testada
int Alphanum(String text) {
    int i=0;

    for(i = 0; text[i] != '\0'; i++)
        if(!isalnum(text[i]) && !isspace(text[i])) return 0;
    return 1;
}
